/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Controladores;

import DaoExtendido.EventoExtension;
import Dao.exceptions.IllegalOrphanException;
import Dao.exceptions.NonexistentEntityException;
import Dao.exceptions.PreexistingEntityException;
import Logico.Evento;
import Logico.Usuario;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;

public class ControladorEvento {

    EventoExtension daoEvento;
    ConnectionFactory conection;

    public ControladorEvento() {

        conection = new ConnectionFactory();
        daoEvento = new EventoExtension(conection.getFactory());
    }

    public boolean guardar(String nombre, String descripcion, Date fechaInicio, Date fechaFin, int cDirector, int cDAdministrativo, int cDDeportivo, int cDLogistica, String logo) {

        boolean guardado = false;

        Evento evento = new Evento();
        evento.setNombre(nombre);
        evento.setDescripcion(descripcion);
        evento.setFechaInicio(fechaInicio);
        evento.setFechaFin(fechaFin);
        Usuario u1 = new Usuario();
        u1.setCedula(cDirector);
        evento.setCeduladirectorevento(u1);
        Usuario u2 = new Usuario();
        u2.setCedula(cDAdministrativo);
        evento.setCeduladirectoradministrativo(u2);
        Usuario u3 = new Usuario();
        u3.setCedula(cDDeportivo);
        evento.setCeduladirectordeportivo(u3);
        Usuario u4 = new Usuario();
        u4.setCedula(cDirector);
        evento.setCeduladirectorlogistica(u4);
        evento.setLogo(logo);

        try {
            daoEvento.create(evento);
            guardado = true;

        } catch (PreexistingEntityException ex) {
            //JOptionPane.showMessageDialog(null, "Ya existe un Evento con el id: " + idevento + ". Por favor inténtelo de nuevo");
        } catch (Exception ex) {
            Logger.getLogger(ControladorEvento.class.getName()).log(Level.SEVERE, null, ex);
        }

        return guardado;
    }

    public boolean borrar(int idevento) {

        boolean borrado = false;

        try {

            daoEvento.destroy(idevento);
            borrado = true;
        } catch (IllegalOrphanException ex) {
            Logger.getLogger(ControladorEvento.class.getName()).log(Level.SEVERE, null, ex);
        } catch (NonexistentEntityException ex) {
            Logger.getLogger(ControladorEvento.class.getName()).log(Level.SEVERE, null, ex);
        }

        return borrado;
    }

    public boolean modificar(int idevento, String nombre, String descripcion, Date fechaInicio, Date fechaFin, int cDirector, int cDAdministrativo, int cDDeportivo, int cDLogistica, String logo) {

        boolean modificado = false;

        Evento eventoEncontrado = this.buscar(idevento);

        if (eventoEncontrado != null) {

            eventoEncontrado.setIdevento(idevento);
            eventoEncontrado.setNombre(nombre);
            eventoEncontrado.setDescripcion(descripcion);
            eventoEncontrado.setFechaInicio(fechaInicio);
            eventoEncontrado.setFechaFin(fechaFin);
            Usuario u1 = new Usuario();
            u1.setCedula(cDirector);
            eventoEncontrado.setCeduladirectorevento(u1);
            Usuario u2 = new Usuario();
            u2.setCedula(cDAdministrativo);
            eventoEncontrado.setCeduladirectoradministrativo(u2);
            Usuario u3 = new Usuario();
            u3.setCedula(cDDeportivo);
            eventoEncontrado.setCeduladirectordeportivo(u3);
            Usuario u4 = new Usuario();
            u4.setCedula(cDirector);
            eventoEncontrado.setCeduladirectorlogistica(u4);
            eventoEncontrado.setLogo(logo);
            eventoEncontrado.setLogo(logo);

            try {

                daoEvento.edit(eventoEncontrado);
                modificado = true;
            } catch (IllegalOrphanException ex) {
                Logger.getLogger(ControladorEvento.class.getName()).log(Level.SEVERE, null, ex);
            } catch (NonexistentEntityException ex) {
                Logger.getLogger(ControladorEvento.class.getName()).log(Level.SEVERE, null, ex);
            } catch (Exception ex) {
                Logger.getLogger(ControladorEvento.class.getName()).log(Level.SEVERE, null, ex);
            }

        } else {
            JOptionPane.showMessageDialog(null, "El Evento no se encuentra en nuestro sistema.");
        }

        return modificado;
    }

    public Evento buscar(int idevento) {

        return daoEvento.findEvento(idevento);
    }
    
    public ArrayList<Evento> buscarPorNombre(String nombre) {

        return daoEvento.buscarPorNombre(nombre);
    }


    public List<Evento> listarEventos() {

        return daoEvento.findEventoEntities();
    }
}
